package com.liufei.math;

import java.math.BigInteger;

public class Lesson1_1 {

    /**
     * 十进制转二进制
     * @param devimalSource
     * @return
     */
    public static String decimalToBinary(int devimalSource){
        BigInteger bi=new BigInteger(String.valueOf(devimalSource));   // 转换成BigInteger类型，默认是十进制
        return bi.toString(2);  //参数2指的是转化成二进制
    }

    /**
     * 二进制转十进制
     * @param binarySource
     * @return
     */
    public static int binaryToDecimal(String binarySource){
        BigInteger bi=new BigInteger(binarySource,2); //转换为BigInteger,参数2是指定二进制
        return Integer.parseInt(bi.toString());    //默认转换为十进制
    }

    /**
     * 左移  左移一位就是将数字翻倍
     * @param num
     * @param m
     * @return
     */
    public static int leftShift(int num,int m){
        return num<<m;
    }

    /**
     * 二进制右移，就是将数字除以2并求整数商的操作
     * @param num
     * @param m
     * @return
     */
    public static int rightShift(int num,int m){
        /**
         * >>算术右移与>>>逻辑右移的区别
         */
        return num>>>m;
    }

    /**
     * 位的“或”、“与”、“异或”
     * @param args
     */

    /**
     * 二进制按位"或的操作"
     * @param num1
     * @param num2
     * @return
     */
    public static int or(int num1,int num2){
        return (num1| num2);
    }

    /**
     * 二进制按位"与的操作"
     * @param num1
     * @param num2
     * @return
     */
    public static int and(int num1,int num2){
        return (num1 & num2);
    }

    /**
     * 二进制按位"异或“的操作"
     * @param num1
     * @param num2
     * @return
     */
    public static int xor(int num1,int num2){
        return (num1 ^ num2);
    }

    public static void main(String[] args) {
        System.out.println(decimalToBinary(100));
//        System.out.println(binaryToDecimal("1xdaszz"));
        System.out.println(leftShift(100,8));
        System.out.println(rightShift(25600,8));
        System.out.println(or(25600,25600));
        System.out.println(and(25600,25600));
        System.out.println(xor(25600,25600));
    }
}
